import 'package:flutter/material.dart';

class PageUtil {
  //如果想在弹出新路由之前，删除路由栈中的所有路由，那可以使用下面的这种写法，(Route<dynamic> route) => false，
  //这样能保证把之前所有的路由都进行删除，然后才push新的路由。
  void openRemoveAll(BuildContext context, Widget page) {
    Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) => page), (route) => false);
  }

  // void open(BuildContext context, Widget page) {
  //   Navigator.push(context, MaterialPageRoute(builder: (context) => page));
  // }

  void open(BuildContext context, Widget page, {String? routeName, Object? arguments}) {
    FocusManager.instance.primaryFocus?.unfocus();
    Navigator.push(
        context,
        MaterialPageRoute(
          builder: (context) => page,
          settings: RouteSettings(name: routeName, arguments: arguments),
        ));
  }

  void openReplace(BuildContext context, Widget page) {
    Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => page));
  }

  void back(BuildContext context) {
    Navigator.pop(context);
  }

  void backAndReturnData(BuildContext context, String data) {
    Navigator.pop(context, data);
  }

//这里直接返回到root页面 文档上说会一直pop页面知道遇到指定的页面为止
//这种用到的地方还是挺多的比如 A-->B--->c--->d  d页面完成直接返回A,bc就直接pop出栈
  void backUntilPage(BuildContext context, String routeName) {
    Navigator.popUntil(context, (route) {
      return route.settings.name == routeName;
    });
  }

  void backUntilHome(BuildContext context) {
    Navigator.popUntil(context, (route) {
      return route.isFirst;
    });
  }
}
